package _1_goodfirst;

public class _7_DDArray 
{
	public static void main(String[]args) 
	{
		//二维数组
		/* 声明方法一
		 * 数据类型[][]数组名 = new 数据类型[行的个数][列的个数]
		 * 行：一维数组的个数，列；每个一维数组中元素的个数
		 * [][]两个括号里的数字检索都是从0开始的*/
		int[][] xx = new int [2][2];
		System.out.println(xx); //[[I@2f4d3709
		System.out.println(xx[0]);//[I@4e50df2e
		//System.out.println(xx[2]);这行代码报错，超过二维数组长度
		//定义一维数组
		int[] arr0 = {10,20,30,40,50};
		int[] arr1 = {10,20};
		int[] arr2 = {10,20};
		xx[0] = arr0;
		xx[1] = arr1;
		//xx[2] = arr2;
		System.out.println(xx[0][4]);//这竟然没报错，不是超一维数组长度2了吗？个人猜测应该是覆盖了原设定
		System.out.println(xx[1][0]);
		System.out.println(xx[1][1]);
		//System.out.println(xx[2][2]);//报错了，int[2][2]两个[]中的2都是指长度为2，而不是可以索引到2
		System.out.println("-----------------------------------------------------------");
		/*声明方法二
		 * 数据类型[][]数组名 = new int[行的个数][]
		 * 和第一种方法的区别是每个一维数组中的元素长度不确定*/
		int[][] yy = new int [3][];
		//第一行
        yy[0]=new int[7];//相当于int[] a=new int[3]
        for(int i=0;i<yy[0].length;i++){
            yy[0][i]=i+1;
        }
        //第二行
        yy[1]=new int[4];
          for(int i=0;i<yy[1].length;i++){
          yy[1][i]=i+1;
          }
      //第三行
      yy[2]=new int[8];
          for(int i=0;i<yy[2].length;i++){
              yy[2][i]=i+1;
          }
        //遍历数组
        for(int i=0;i<yy.length;i++){
            for(int j=0;j<yy[i].length;j++){
                System.out.print(yy[i][j]);
            }System.out.println();
        }System.out.println("-----------------------------------------------------------");
		/*声明方法三
		 * 数据类型[][]数组名 = {[元素,元素...},{元素...},...,{}}
		 * 每个一维数组都给出,相当于二维数组的静态初始化*/
		int[][] zz = {{1,2},{3,4,5,6},{7,8,9}};
		//遍历二维数组
		//遍历每一个一维数组zz[i]
		for(int i = 0; i < zz.length; i++)
		{
			//遍历每一个一维数组的元素zz[i][j]
			for(int j = 0; j < zz[i].length; j++)
			{
				System.out.print(zz[i][j]+" ");
			}
			System.out.println("");
		}
	}
}
